↳ Prolog
↳ PrologToPiTRSProof
perm_in([], []) → perm_out([], [])
perm_in(Xs, .(X, Ys)) → U3(Xs, X, Ys, app2_in(X1s, .(X, X2s), Xs))
app2_in([], Ys, Ys) → app2_out([], Ys, Ys)
app2_in(.(X, Xs), Ys, .(X, Zs)) → U2(X, Xs, Ys, Zs, app2_in(Xs, Ys, Zs))
U2(X, Xs, Ys, Zs, app2_out(Xs, Ys, Zs)) → app2_out(.(X, Xs), Ys, .(X, Zs))
U3(Xs, X, Ys, app2_out(X1s, .(X, X2s), Xs)) → U4(Xs, X, Ys, X1s, X2s, app1_in(X1s, X2s, Zs))
app1_in([], Ys, Ys) → app1_out([], Ys, Ys)
app1_in(.(X, Xs), Ys, .(X, Zs)) → U1(X, Xs, Ys, Zs, app1_in(Xs, Ys, Zs))
U1(X, Xs, Ys, Zs, app1_out(Xs, Ys, Zs)) → app1_out(.(X, Xs), Ys, .(X, Zs))
U4(Xs, X, Ys, X1s, X2s, app1_out(X1s, X2s, Zs)) → U5(Xs, X, Ys, perm_in(Zs, Ys))
U5(Xs, X, Ys, perm_out(Zs, Ys)) → perm_out(Xs, .(X, Ys))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
perm_in([], []) → perm_out([], [])
perm_in(Xs, .(X, Ys)) → U3(Xs, X, Ys, app2_in(X1s, .(X, X2s), Xs))
app2_in([], Ys, Ys) → app2_out([], Ys, Ys)
app2_in(.(X, Xs), Ys, .(X, Zs)) → U2(X, Xs, Ys, Zs, app2_in(Xs, Ys, Zs))
U2(X, Xs, Ys, Zs, app2_out(Xs, Ys, Zs)) → app2_out(.(X, Xs), Ys, .(X, Zs))
U3(Xs, X, Ys, app2_out(X1s, .(X, X2s), Xs)) → U4(Xs, X, Ys, X1s, X2s, app1_in(X1s, X2s, Zs))
app1_in([], Ys, Ys) → app1_out([], Ys, Ys)
app1_in(.(X, Xs), Ys, .(X, Zs)) → U1(X, Xs, Ys, Zs, app1_in(Xs, Ys, Zs))
U1(X, Xs, Ys, Zs, app1_out(Xs, Ys, Zs)) → app1_out(.(X, Xs), Ys, .(X, Zs))
U4(Xs, X, Ys, X1s, X2s, app1_out(X1s, X2s, Zs)) → U5(Xs, X, Ys, perm_in(Zs, Ys))
U5(Xs, X, Ys, perm_out(Zs, Ys)) → perm_out(Xs, .(X, Ys))
PERM_IN(Xs, .(X, Ys)) → U31(Xs, X, Ys, app2_in(X1s, .(X, X2s), Xs))
PERM_IN(Xs, .(X, Ys)) → APP2_IN(X1s, .(X, X2s), Xs)
APP2_IN(.(X, Xs), Ys, .(X, Zs)) → U21(X, Xs, Ys, Zs, app2_in(Xs, Ys, Zs))
APP2_IN(.(X, Xs), Ys, .(X, Zs)) → APP2_IN(Xs, Ys, Zs)
U31(Xs, X, Ys, app2_out(X1s, .(X, X2s), Xs)) → U41(Xs, X, Ys, X1s, X2s, app1_in(X1s, X2s, Zs))
U31(Xs, X, Ys, app2_out(X1s, .(X, X2s), Xs)) → APP1_IN(X1s, X2s, Zs)
APP1_IN(.(X, Xs), Ys, .(X, Zs)) → U11(X, Xs, Ys, Zs, app1_in(Xs, Ys, Zs))
APP1_IN(.(X, Xs), Ys, .(X, Zs)) → APP1_IN(Xs, Ys, Zs)
U41(Xs, X, Ys, X1s, X2s, app1_out(X1s, X2s, Zs)) → U51(Xs, X, Ys, perm_in(Zs, Ys))
U41(Xs, X, Ys, X1s, X2s, app1_out(X1s, X2s, Zs)) → PERM_IN(Zs, Ys)
perm_in([], []) → perm_out([], [])
perm_in(Xs, .(X, Ys)) → U3(Xs, X, Ys, app2_in(X1s, .(X, X2s), Xs))
app2_in([], Ys, Ys) → app2_out([], Ys, Ys)
app2_in(.(X, Xs), Ys, .(X, Zs)) → U2(X, Xs, Ys, Zs, app2_in(Xs, Ys, Zs))
U2(X, Xs, Ys, Zs, app2_out(Xs, Ys, Zs)) → app2_out(.(X, Xs), Ys, .(X, Zs))
U3(Xs, X, Ys, app2_out(X1s, .(X, X2s), Xs)) → U4(Xs, X, Ys, X1s, X2s, app1_in(X1s, X2s, Zs))
app1_in([], Ys, Ys) → app1_out([], Ys, Ys)
app1_in(.(X, Xs), Ys, .(X, Zs)) → U1(X, Xs, Ys, Zs, app1_in(Xs, Ys, Zs))
U1(X, Xs, Ys, Zs, app1_out(Xs, Ys, Zs)) → app1_out(.(X, Xs), Ys, .(X, Zs))
U4(Xs, X, Ys, X1s, X2s, app1_out(X1s, X2s, Zs)) → U5(Xs, X, Ys, perm_in(Zs, Ys))
U5(Xs, X, Ys, perm_out(Zs, Ys)) → perm_out(Xs, .(X, Ys))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
PERM_IN(Xs, .(X, Ys)) → U31(Xs, X, Ys, app2_in(X1s, .(X, X2s), Xs))
PERM_IN(Xs, .(X, Ys)) → APP2_IN(X1s, .(X, X2s), Xs)
APP2_IN(.(X, Xs), Ys, .(X, Zs)) → U21(X, Xs, Ys, Zs, app2_in(Xs, Ys, Zs))
APP2_IN(.(X, Xs), Ys, .(X, Zs)) → APP2_IN(Xs, Ys, Zs)
U31(Xs, X, Ys, app2_out(X1s, .(X, X2s), Xs)) → U41(Xs, X, Ys, X1s, X2s, app1_in(X1s, X2s, Zs))
U31(Xs, X, Ys, app2_out(X1s, .(X, X2s), Xs)) → APP1_IN(X1s, X2s, Zs)
APP1_IN(.(X, Xs), Ys, .(X, Zs)) → U11(X, Xs, Ys, Zs, app1_in(Xs, Ys, Zs))
APP1_IN(.(X, Xs), Ys, .(X, Zs)) → APP1_IN(Xs, Ys, Zs)
U41(Xs, X, Ys, X1s, X2s, app1_out(X1s, X2s, Zs)) → U51(Xs, X, Ys, perm_in(Zs, Ys))
U41(Xs, X, Ys, X1s, X2s, app1_out(X1s, X2s, Zs)) → PERM_IN(Zs, Ys)
perm_in([], []) → perm_out([], [])
perm_in(Xs, .(X, Ys)) → U3(Xs, X, Ys, app2_in(X1s, .(X, X2s), Xs))
app2_in([], Ys, Ys) → app2_out([], Ys, Ys)
app2_in(.(X, Xs), Ys, .(X, Zs)) → U2(X, Xs, Ys, Zs, app2_in(Xs, Ys, Zs))
U2(X, Xs, Ys, Zs, app2_out(Xs, Ys, Zs)) → app2_out(.(X, Xs), Ys, .(X, Zs))
U3(Xs, X, Ys, app2_out(X1s, .(X, X2s), Xs)) → U4(Xs, X, Ys, X1s, X2s, app1_in(X1s, X2s, Zs))
app1_in([], Ys, Ys) → app1_out([], Ys, Ys)
app1_in(.(X, Xs), Ys, .(X, Zs)) → U1(X, Xs, Ys, Zs, app1_in(Xs, Ys, Zs))
U1(X, Xs, Ys, Zs, app1_out(Xs, Ys, Zs)) → app1_out(.(X, Xs), Ys, .(X, Zs))
U4(Xs, X, Ys, X1s, X2s, app1_out(X1s, X2s, Zs)) → U5(Xs, X, Ys, perm_in(Zs, Ys))
U5(Xs, X, Ys, perm_out(Zs, Ys)) → perm_out(Xs, .(X, Ys))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDP
APP1_IN(.(X, Xs), Ys, .(X, Zs)) → APP1_IN(Xs, Ys, Zs)
perm_in([], []) → perm_out([], [])
perm_in(Xs, .(X, Ys)) → U3(Xs, X, Ys, app2_in(X1s, .(X, X2s), Xs))
app2_in([], Ys, Ys) → app2_out([], Ys, Ys)
app2_in(.(X, Xs), Ys, .(X, Zs)) → U2(X, Xs, Ys, Zs, app2_in(Xs, Ys, Zs))
U2(X, Xs, Ys, Zs, app2_out(Xs, Ys, Zs)) → app2_out(.(X, Xs), Ys, .(X, Zs))
U3(Xs, X, Ys, app2_out(X1s, .(X, X2s), Xs)) → U4(Xs, X, Ys, X1s, X2s, app1_in(X1s, X2s, Zs))
app1_in([], Ys, Ys) → app1_out([], Ys, Ys)
app1_in(.(X, Xs), Ys, .(X, Zs)) → U1(X, Xs, Ys, Zs, app1_in(Xs, Ys, Zs))
U1(X, Xs, Ys, Zs, app1_out(Xs, Ys, Zs)) → app1_out(.(X, Xs), Ys, .(X, Zs))
U4(Xs, X, Ys, X1s, X2s, app1_out(X1s, X2s, Zs)) → U5(Xs, X, Ys, perm_in(Zs, Ys))
U5(Xs, X, Ys, perm_out(Zs, Ys)) → perm_out(Xs, .(X, Ys))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
↳ PiDP
APP1_IN(.(X, Xs), Ys, .(X, Zs)) → APP1_IN(Xs, Ys, Zs)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
↳ PiDP
APP1_IN(.(Xs), Ys) → APP1_IN(Xs, Ys)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
APP2_IN(.(X, Xs), Ys, .(X, Zs)) → APP2_IN(Xs, Ys, Zs)
perm_in([], []) → perm_out([], [])
perm_in(Xs, .(X, Ys)) → U3(Xs, X, Ys, app2_in(X1s, .(X, X2s), Xs))
app2_in([], Ys, Ys) → app2_out([], Ys, Ys)
app2_in(.(X, Xs), Ys, .(X, Zs)) → U2(X, Xs, Ys, Zs, app2_in(Xs, Ys, Zs))
U2(X, Xs, Ys, Zs, app2_out(Xs, Ys, Zs)) → app2_out(.(X, Xs), Ys, .(X, Zs))
U3(Xs, X, Ys, app2_out(X1s, .(X, X2s), Xs)) → U4(Xs, X, Ys, X1s, X2s, app1_in(X1s, X2s, Zs))
app1_in([], Ys, Ys) → app1_out([], Ys, Ys)
app1_in(.(X, Xs), Ys, .(X, Zs)) → U1(X, Xs, Ys, Zs, app1_in(Xs, Ys, Zs))
U1(X, Xs, Ys, Zs, app1_out(Xs, Ys, Zs)) → app1_out(.(X, Xs), Ys, .(X, Zs))
U4(Xs, X, Ys, X1s, X2s, app1_out(X1s, X2s, Zs)) → U5(Xs, X, Ys, perm_in(Zs, Ys))
U5(Xs, X, Ys, perm_out(Zs, Ys)) → perm_out(Xs, .(X, Ys))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
APP2_IN(.(X, Xs), Ys, .(X, Zs)) → APP2_IN(Xs, Ys, Zs)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
APP2_IN(.(Zs)) → APP2_IN(Zs)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
U41(Xs, X, Ys, X1s, X2s, app1_out(X1s, X2s, Zs)) → PERM_IN(Zs, Ys)
U31(Xs, X, Ys, app2_out(X1s, .(X, X2s), Xs)) → U41(Xs, X, Ys, X1s, X2s, app1_in(X1s, X2s, Zs))
PERM_IN(Xs, .(X, Ys)) → U31(Xs, X, Ys, app2_in(X1s, .(X, X2s), Xs))
perm_in([], []) → perm_out([], [])
perm_in(Xs, .(X, Ys)) → U3(Xs, X, Ys, app2_in(X1s, .(X, X2s), Xs))
app2_in([], Ys, Ys) → app2_out([], Ys, Ys)
app2_in(.(X, Xs), Ys, .(X, Zs)) → U2(X, Xs, Ys, Zs, app2_in(Xs, Ys, Zs))
U2(X, Xs, Ys, Zs, app2_out(Xs, Ys, Zs)) → app2_out(.(X, Xs), Ys, .(X, Zs))
U3(Xs, X, Ys, app2_out(X1s, .(X, X2s), Xs)) → U4(Xs, X, Ys, X1s, X2s, app1_in(X1s, X2s, Zs))
app1_in([], Ys, Ys) → app1_out([], Ys, Ys)
app1_in(.(X, Xs), Ys, .(X, Zs)) → U1(X, Xs, Ys, Zs, app1_in(Xs, Ys, Zs))
U1(X, Xs, Ys, Zs, app1_out(Xs, Ys, Zs)) → app1_out(.(X, Xs), Ys, .(X, Zs))
U4(Xs, X, Ys, X1s, X2s, app1_out(X1s, X2s, Zs)) → U5(Xs, X, Ys, perm_in(Zs, Ys))
U5(Xs, X, Ys, perm_out(Zs, Ys)) → perm_out(Xs, .(X, Ys))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
U41(Xs, X, Ys, X1s, X2s, app1_out(X1s, X2s, Zs)) → PERM_IN(Zs, Ys)
U31(Xs, X, Ys, app2_out(X1s, .(X, X2s), Xs)) → U41(Xs, X, Ys, X1s, X2s, app1_in(X1s, X2s, Zs))
PERM_IN(Xs, .(X, Ys)) → U31(Xs, X, Ys, app2_in(X1s, .(X, X2s), Xs))
app1_in([], Ys, Ys) → app1_out([], Ys, Ys)
app1_in(.(X, Xs), Ys, .(X, Zs)) → U1(X, Xs, Ys, Zs, app1_in(Xs, Ys, Zs))
app2_in([], Ys, Ys) → app2_out([], Ys, Ys)
app2_in(.(X, Xs), Ys, .(X, Zs)) → U2(X, Xs, Ys, Zs, app2_in(Xs, Ys, Zs))
U1(X, Xs, Ys, Zs, app1_out(Xs, Ys, Zs)) → app1_out(.(X, Xs), Ys, .(X, Zs))
U2(X, Xs, Ys, Zs, app2_out(Xs, Ys, Zs)) → app2_out(.(X, Xs), Ys, .(X, Zs))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
U31(app2_out(X1s, .(X2s))) → U41(app1_in(X1s, X2s))
PERM_IN(Xs) → U31(app2_in(Xs))
U41(app1_out(Zs)) → PERM_IN(Zs)
app1_in([], Ys) → app1_out(Ys)
app1_in(.(Xs), Ys) → U1(app1_in(Xs, Ys))
app2_in(Ys) → app2_out([], Ys)
app2_in(.(Zs)) → U2(app2_in(Zs))
U1(app1_out(Zs)) → app1_out(.(Zs))
U2(app2_out(Xs, Ys)) → app2_out(.(Xs), Ys)
app1_in(x0, x1)
app2_in(x0)
U1(x0)
U2(x0)
U31(app2_out(X1s, .(X2s))) → U41(app1_in(X1s, X2s))
app2_in(Ys) → app2_out([], Ys)
POL(.(x1)) = 1 + x1
POL(PERM_IN(x1)) = 1 + 2·x1
POL(U1(x1)) = 2 + x1
POL(U2(x1)) = 2 + x1
POL(U31(x1)) = x1
POL(U41(x1)) = 1 + x1
POL([]) = 0
POL(app1_in(x1, x2)) = 2·x1 + 2·x2
POL(app1_out(x1)) = 2·x1
POL(app2_in(x1)) = 1 + 2·x1
POL(app2_out(x1, x2)) = 2·x1 + 2·x2
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ DependencyGraphProof
PERM_IN(Xs) → U31(app2_in(Xs))
U41(app1_out(Zs)) → PERM_IN(Zs)
app1_in([], Ys) → app1_out(Ys)
app1_in(.(Xs), Ys) → U1(app1_in(Xs, Ys))
app2_in(.(Zs)) → U2(app2_in(Zs))
U1(app1_out(Zs)) → app1_out(.(Zs))
U2(app2_out(Xs, Ys)) → app2_out(.(Xs), Ys)
app1_in(x0, x1)
app2_in(x0)
U1(x0)
U2(x0)